home *** CD-ROM | disk | FTP | other *** search
- /*** LISTING 2 ***/
- /*** ***/
- /*** set.c ***/
- /*** **************************************** ***/
- /*** SET SERIAL PARAMETERS ***/
- /*** **************************************** ***/
- #include "serial.h"
-
- int portbase;
-
- int SetSerial (int ComPort,long Baud,int Parity,
- int DataBits,int StopBits)
- {
- if (SetPort(ComPort))
- {
- return (-1);
- }
-
- if (SetBaud(Baud))
- {
- return (-1);
- }
-
- if (SetOthers(Parity,DataBits,StopBits))
- {
- return (-1);
- }
-
- return (0);
- }
-
- /*** **************************************** ***/
- /*** SET THE PORT VALUE TO CORRECT COM PORT ***/
- /*** **************************************** ***/
-
- int SetPort (int ComPort)
- {
- switch (ComPort)
- {
- case COM1: portbase = COM1BASE;
- break;
-
- case COM2: portbase = COM2BASE;
- break;
-
- case COM3: portbase = COM3BASE;
- break;
-
- case COM4: portbase = COM4BASE;
- break;
-
- default: return (-1);
- }
- return (0);
- }
-
- /*** **************************************** ***/
- /*** SET THE BAUD RATE - DLAB MUST BE SET ON.***/
- /*** **************************************** ***/
- int SetBaud (long Baud)
- {
- char Current_Value;
- int divisor;
-
- if ((Baud <= 0) || (Baud > 115200L))
- {
- return (-1);
- }
-
- else
- {
- divisor = (int)(115200L/Baud);
- }
-
- /*** READ CURRENT VALUES IN LINE CONTROL REG ***/
-
- Current_Value = inp(portbase + LCR);
-
- /*** OR CURRENT VALUE WITH 0x80 TO SET DLAB ***/
-
- outp(portbase + LCR,(Current_Value | DLAB));
-
- /*** OUTPUT BAUD DIVISOR TO LOW BYTE ***/
-
- outp(portbase + DLL,(divisor & 0x00FF));
-
- /*** OUTPUT BAUD DIVISOR TO HIGH BYTE ***/
-
- outp(portbase + DLH,((divisor >> 8) & 0x00FF));
-
- /*** TURN DLAB OFF BY SENDING CURRENT VALUE ***/
-
- outp(portbase + LCR,Current_Value);
-
- return (0);
- }
-
- /*** **************************************** ***/
- /*** SET PARITY, DATA BITS, AND STOPBITS ***/
- /*** **************************************** ***/
- int SetOthers (int Parity,int DataBits,int StopBits)
- {
- int setting;
-
- if ((DataBits < 5) || (DataBits > 8))
- {
- return (-1);
- }
-
- if ((StopBits != 1 && StopBits != 2))
- {
- return (-1);
- }
-
- if ((Parity != NO_PARITY) && (Parity != ODD_PARITY)
- && (Parity != EVEN_PARITY))
- {
- return (-1);
- }
-
- setting = DataBits - 5;
- setting |= ((StopBits == 1) ? 0x00 : 0x04);
- setting |= Parity;
-
- outp(portbase + LCR,setting);
-
- return (0);
- }
-